package com.idp.common.base;

import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableField;
import com.idp.common.util.IdGen;
import com.idp.common.util.ResourceUtils;
import lombok.Data;

import java.io.Serializable;
import java.util.Date;

/**
 * 实体基类（uuid主键）
 *
 * @author 徐彬人
 * @date 2017/6/13 0013 下午 4:45
 */
@Data
public class UuidBaseEntity<T extends UuidBaseEntity> extends Model<T> implements Cloneable {

    /**
     * 主键
     */
    private String id;
    /**
     * 删除标志：0正常，1删除
     */
    @TableField("logic_delete")
    private Integer logicDelete;

    /**
     * 创建人
     */
    @TableField("create_user")
    private String createUser;

    /**
     * 创建时间
     */
    @TableField("create_date")
    private Date createDate;

    /**
     * 修改人
     */
    @TableField("update_user")
    private String updateUser;

    /**
     * 更新时间
     */
    @TableField("update_date")
    private Date updateDate;

    /**
     * 初始化公共属性
     */
    public void preInsert() {
        setId(IdGen.uuid());
        this.logicDelete = 0;
        this.createDate = new Date();
        this.updateDate = this.createDate;
    }

    /**
     * 初始化公共属性
     */
    public void preInsert(String userId) {
        setId(ResourceUtils.getUUID());
        this.logicDelete = 0;
        this.createDate = new Date();
        this.updateDate = this.createDate;
        this.createUser = userId;
        this.updateUser = userId;
    }

    /**
     * 编辑
     */
    public void preUpdate(String userId) {
        this.updateDate = new Date();
        this.updateUser = userId;
    }

    /**
     * 更新最后修改时间
     */
    public void preUpdate() {
        this.updateDate = new Date();
    }

    @Override
    protected Serializable pkVal() {
        return this.id;
    }

    @Override
    public Object clone() {
        T t = null;
        try {
            t = (T) super.clone();
        } catch (CloneNotSupportedException var3) {
            var3.printStackTrace();
        }
        return t;
    }
}
